{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "9cd8236c-1a11-4d08-aad3-d1744d1b26e3",
   "metadata": {},
   "source": [
    "# REPL Basics\n",
    "\n",
    "<a href=\"http://35.236.121.59/hub/user-redirect/git-pull?repo=https%3A%2F%2Fgithub.com%2Fproject-chip%2Fconnectedhomeip&urlpath=lab%2Ftree%2Fconnectedhomeip%2Fdocs%2Fguides%2Frepl%2FMatter%2520-%2520REPL%2520Intro.ipynb&branch=master\">\n",
    "<img src=\"https://i.ibb.co/hR3yWsC/launch-playground.png\" alt=\"drawing\" width=\"130\"/>\n",
    "</a>\n",
    "<br></br>\n",
    "\n",
    "This goes over the basics of interacting with the REPL."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b7f651c-2e64-4d0e-aa93-1a01d093c946",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Initialization\n",
    "\n",
    "Let's first begin by setting up by importing some key modules that are needed to make it easier for us to interact with the Matter stack.\n",
    "\n",
    "`ChipReplStartup.py` is run within the global namespace. This results in all of its imports being made available here.\n",
    "\n",
    "> **NOTE**: _This is not needed if you launch the REPL from the command-line._"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cdffbe57-bd09-41db-a624-cbfcd65c6eae",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #00ff00; text-decoration-color: #00ff00\">──────────────────────────────────────── </span>Matter REPL<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> ────────────────────────────────────────</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[92m──────────────────────────────────────── \u001b[0mMatter REPL\u001b[92m ────────────────────────────────────────\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "            \n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            Welcome to the Matter Python REPL!</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            For help, please type </span><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">matterhelp()</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            To get more information on a particular object/class, you can pass</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            that into </span><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">matterhelp()</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\"> as well.</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "            \n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            Welcome to the Matter Python REPL!\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            For help, please type \u001b[0m\u001b[1;32mmatterhelp\u001b[0m\u001b[1;32m(\u001b[0m\u001b[1;32m)\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            To get more information on a particular object/class, you can pass\u001b[0m\n",
       "\u001b[1;34m            that into \u001b[0m\u001b[1;32mmatterhelp\u001b[0m\u001b[1;32m(\u001b[0m\u001b[1;32m)\u001b[0m\u001b[1;34m as well.\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #00ff00; text-decoration-color: #00ff00\">─────────────────────────────────────────────────────────────────────────────────────────────</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[92m─────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2022-01-25 16:57:54 johnsj-macbookpro1.roam.corp.google.com root[27642] CRITICAL Loading configuration from /tmp/repl-storage.json...\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Restoring FabricAdmin from storage to manage FabricId </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">, FabricIndex </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mRestoring FabricAdmin from storage to manage FabricId \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m, FabricIndex \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New FabricAdmin: FabricId: 1(1)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Restoring FabricAdmin from storage to manage FabricId </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">2</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">, FabricIndex </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">2</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mRestoring FabricAdmin from storage to manage FabricId \u001b[0m\u001b[1;38;5;129m2\u001b[0m\u001b[38;5;129m, FabricIndex \u001b[0m\u001b[1;38;5;129m2\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New FabricAdmin: FabricId: 2(2)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">Fabric Admins have been loaded and are available at </span><span style=\"color: #800000; text-decoration-color: #800000\">fabricAdmins</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\u001b[34mFabric Admins have been loaded and are available at \u001b[0m\u001b[31mfabricAdmins\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Creating default device controller on fabric </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mCreating default device controller on fabric \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Allocating new controller with FabricId: 1(1), NodeId: 1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">Default CHIP Device Controller has been initialized to manage </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">fabricAdmins[</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">, and is </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">available as </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">devCtrl</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n",
       "\u001b[34mDefault CHIP Device Controller has been initialized to manage \u001b[0m\u001b[1;31mfabricAdmins\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;34m, and is \u001b[0m\n",
       "\u001b[1;34mavailable as \u001b[0m\u001b[1;31mdevCtrl\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import chip.native\n",
    "import pkgutil\n",
    "module = pkgutil.get_loader('chip.ChipReplStartup')\n",
    "%run {module.path}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "49a01315-6cac-4f8a-830d-adb5b7b9fc27",
   "metadata": {},
   "source": [
    "## Persistent Storage\n",
    "\n",
    "> NOTE: By default, the REPL points to `/tmp/repl-storage.json` for its persistent storage. To change that location, you can pass that in directly as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c05b4b22-f6b1-4669-9358-98b0fe9a9136",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #00ff00; text-decoration-color: #00ff00\">──────────────────────────────────────── </span>Matter REPL<span style=\"color: #00ff00; text-decoration-color: #00ff00\"> ────────────────────────────────────────</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[92m──────────────────────────────────────── \u001b[0mMatter REPL\u001b[92m ────────────────────────────────────────\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "            \n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            Welcome to the Matter Python REPL!</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            For help, please type </span><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">matterhelp()</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            To get more information on a particular object/class, you can pass</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            that into </span><span style=\"color: #008000; text-decoration-color: #008000; font-weight: bold\">matterhelp()</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\"> as well.</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">    </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">            </span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "            \n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            Welcome to the Matter Python REPL!\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            For help, please type \u001b[0m\u001b[1;32mmatterhelp\u001b[0m\u001b[1;32m(\u001b[0m\u001b[1;32m)\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            To get more information on a particular object/class, you can pass\u001b[0m\n",
       "\u001b[1;34m            that into \u001b[0m\u001b[1;32mmatterhelp\u001b[0m\u001b[1;32m(\u001b[0m\u001b[1;32m)\u001b[0m\u001b[1;34m as well.\u001b[0m\n",
       "\u001b[1;34m    \u001b[0m\n",
       "\u001b[1;34m            \u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #00ff00; text-decoration-color: #00ff00\">─────────────────────────────────────────────────────────────────────────────────────────────</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[92m─────────────────────────────────────────────────────────────────────────────────────────────\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Restoring FabricAdmin from storage to manage FabricId </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">, FabricIndex </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mRestoring FabricAdmin from storage to manage FabricId \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m, FabricIndex \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New FabricAdmin: FabricId: 1(1)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Restoring FabricAdmin from storage to manage FabricId </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">2</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">, FabricIndex </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">2</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mRestoring FabricAdmin from storage to manage FabricId \u001b[0m\u001b[1;38;5;129m2\u001b[0m\u001b[38;5;129m, FabricIndex \u001b[0m\u001b[1;38;5;129m2\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "New FabricAdmin: FabricId: 2(2)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">Fabric Admins have been loaded and are available at </span><span style=\"color: #800000; text-decoration-color: #800000\">fabricAdmins</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\u001b[34mFabric Admins have been loaded and are available at \u001b[0m\u001b[31mfabricAdmins\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #af00ff; text-decoration-color: #af00ff\">Creating default device controller on fabric </span><span style=\"color: #af00ff; text-decoration-color: #af00ff; font-weight: bold\">1</span><span style=\"color: #af00ff; text-decoration-color: #af00ff\">...</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[38;5;129mCreating default device controller on fabric \u001b[0m\u001b[1;38;5;129m1\u001b[0m\u001b[38;5;129m...\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Allocating new controller with FabricId: 1(1), NodeId: 1\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">Default CHIP Device Controller has been initialized to manage </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">fabricAdmins[</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">0</span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">]</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">, and is </span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">available as </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">devCtrl</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\n",
       "\u001b[34mDefault CHIP Device Controller has been initialized to manage \u001b[0m\u001b[1;31mfabricAdmins\u001b[0m\u001b[1;31m[\u001b[0m\u001b[1;31m0\u001b[0m\u001b[1;31m]\u001b[0m\u001b[1;34m, and is \u001b[0m\n",
       "\u001b[1;34mavailable as \u001b[0m\u001b[1;31mdevCtrl\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import chip.native\n",
    "import pkgutil\n",
    "module = pkgutil.get_loader('chip.ChipReplStartup')\n",
    "%run {module.path} --storagepath /tmp/repl.json"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04152051-9b58-4a12-a92c-a01db33e38ad",
   "metadata": {},
   "source": [
    "## Help\n",
    "\n",
    "To get help for the various classes and their respective methods, run:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b36f41dd-d5e2-447e-a9a4-f1eab7d92bec",
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭─────────────────── </span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">class</span><span style=\"color: #000000; text-decoration-color: #000000\"> </span><span style=\"color: #008000; text-decoration-color: #008000\">'chip.ChipDeviceCtrl.ChipDeviceController'</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&gt;</span><span style=\"color: #000080; text-decoration-color: #000080\"> ────────────────────╮</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008000; text-decoration-color: #008000\">╭───────────────────────────────────────────────────────────────────────────────────────╮</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">chip.ChipDeviceCtrl.ChipDeviceController</span><span style=\"color: #000000; text-decoration-color: #000000\"> object at </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0x1143b3910</span><span style=\"font-weight: bold\">&gt;</span>                      <span style=\"color: #008000; text-decoration-color: #008000\">│</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008000; text-decoration-color: #008000\">╰───────────────────────────────────────────────────────────────────────────────────────╯</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">activeList</span> = <span style=\"font-weight: bold\">{</span>                                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                 <span style=\"font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">chip.ChipDeviceCtrl.ChipDeviceController</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #000000; text-decoration-color: #000000\">object at </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0x1143b3910</span><span style=\"font-weight: bold\">&gt;</span>                        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"font-weight: bold\">}</span>                                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                   <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">devCtrl</span> = <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">c_void_p</span><span style=\"font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">140320379576320</span><span style=\"font-weight: bold\">)</span>                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                  <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">isActive</span> = <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                     <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">state</span> = <span style=\"font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">DCState.IDLE:</span><span style=\"color: #000000; text-decoration-color: #000000\"> </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span><span style=\"font-weight: bold\">&gt;</span>                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>        <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">cbHandleCommissioningCompleteFunct</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">cbHandleCommissioningCompleteFunct</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">...</span><span style=\"font-weight: bold\">)</span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>          <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">cbHandleKeyExchangeCompleteFunct</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">cbHandleKeyExchangeCompleteFunct</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">...</span><span style=\"font-weight: bold\">)</span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                 <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">cbOnAddressUpdateComplete</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">cbOnAddressUpdateComplete</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">...</span><span style=\"font-weight: bold\">)</span>            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                             <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">CheckIsActive</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">CheckIsActive</span><span style=\"font-weight: bold\">()</span>:                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                        <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">CloseBLEConnection</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">CloseBLEConnection</span><span style=\"font-weight: bold\">()</span>:                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                              <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">CloseSession</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">CloseSession</span><span style=\"font-weight: bold\">(</span>nodeid<span style=\"font-weight: bold\">)</span>:                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">Commission</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">Commission</span><span style=\"font-weight: bold\">(</span>nodeid<span style=\"font-weight: bold\">)</span>:                       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                              <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">CommissionIP</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">CommissionIP</span><span style=\"font-weight: bold\">(</span>ipaddr, setupPinCode,        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             nodeid<span style=\"font-weight: bold\">)</span>:                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ConnectBLE</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ConnectBLE</span><span style=\"font-weight: bold\">(</span>discriminator, setupPinCode,   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             nodeid<span style=\"font-weight: bold\">)</span>:                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ConnectBle</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ConnectBle</span><span style=\"font-weight: bold\">(</span>bleConnection<span style=\"font-weight: bold\">)</span>:                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                  <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverAllCommissioning</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverAllCommissioning</span><span style=\"font-weight: bold\">()</span>:               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverCommissionableNodesCommissioningEn…</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                           = <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverCommissionableNodesCommissioningEnab…</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>     <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverCommissionableNodesDeviceType</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverCommissionableNodesDeviceType</span><span style=\"font-weight: bold\">(</span>device… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverCommissionableNodesLongDiscriminat…</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                           = <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverCommissionableNodesLongDiscriminator</span><span style=\"font-weight: bold\">…</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverCommissionableNodesShortDiscrimina…</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                           = <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverCommissionableNodesShortDiscriminato…</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>         <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">DiscoverCommissionableNodesVendor</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">DiscoverCommissionableNodesVendor</span><span style=\"font-weight: bold\">(</span>vendor<span style=\"font-weight: bold\">)</span>:    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                    <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">EstablishPASESessionIP</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">EstablishPASESessionIP</span><span style=\"font-weight: bold\">(</span>ipaddr,            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             setupPinCode, nodeid<span style=\"font-weight: bold\">)</span>:                        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                         <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetAddressAndPort</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetAddressAndPort</span><span style=\"font-weight: bold\">(</span>nodeid<span style=\"font-weight: bold\">)</span>:                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                         <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetClusterHandler</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetClusterHandler</span><span style=\"font-weight: bold\">()</span>:                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                     <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetCompressedFabricId</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetCompressedFabricId</span><span style=\"font-weight: bold\">()</span>:                  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                    <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetConnectedDeviceSync</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetConnectedDeviceSync</span><span style=\"font-weight: bold\">(</span>nodeid<span style=\"font-weight: bold\">)</span>:           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetFabricId</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetFabricId</span><span style=\"font-weight: bold\">()</span>:                            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                  <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetIPForDiscoveredDevice</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetIPForDiscoveredDevice</span><span style=\"font-weight: bold\">(</span>idx, addrStr,    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             length<span style=\"font-weight: bold\">)</span>:                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                              <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">GetLogFilter</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">GetLogFilter</span><span style=\"font-weight: bold\">()</span>:                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">IsConnected</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">IsConnected</span><span style=\"font-weight: bold\">()</span>:                            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                   <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">OpenCommissioningWindow</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">OpenCommissioningWindow</span><span style=\"font-weight: bold\">(</span>nodeid, timeout,  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             iteration, discriminator, option<span style=\"font-weight: bold\">)</span>:            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ParseQRCode</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ParseQRCode</span><span style=\"font-weight: bold\">(</span>qrCode, output<span style=\"font-weight: bold\">)</span>:              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                    <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">PrintDiscoveredDevices</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">PrintDiscoveredDevices</span><span style=\"font-weight: bold\">()</span>:                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                             <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ReadAttribute</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ReadAttribute</span><span style=\"font-weight: bold\">(</span>nodeid: int, attributes:    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             List<span style=\"font-weight: bold\">[</span>Union<span style=\"font-weight: bold\">[</span>NoneType, Tuple<span style=\"font-weight: bold\">[</span>int<span style=\"font-weight: bold\">]</span>,              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Clus… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Clus… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>int,                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Cluster<span style=\"font-weight: bold\">]]</span>,  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>int,                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.ClusterAtt… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             returnClusterObject: bool = <span style=\"color: #ff0000; text-decoration-color: #ff0000; font-style: italic\">False</span>,            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             reportInterval: Tuple<span style=\"font-weight: bold\">[</span>int, int<span style=\"font-weight: bold\">]</span> = <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>,       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             fabricFiltered: bool = <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">)</span>:                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Read a list of attributes from a target node</span>  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">nodeId: Target's Node ID</span>                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">attributes: A list of tuples of varying types</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">depending on the type of read being </span>          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">requested:</span>                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">endpoint, Clusters.ClusterA.AttributeA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = specific</span>                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">endpoint, Clusters.ClusterA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:           </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = *</span>                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Clusters.ClusterA.AttributeA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:          </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = specific</span>                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    endpoint:                                </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = *,         </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = *</span>                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    Clusters.ClusterA:                       </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = *</span>                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">'*'</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> or </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">()</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:                               </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = *,         </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Attribute = *</span>                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    The cluster and attributes specified </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">above are to be selected from the generated </span>  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">cluster objects.</span>                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    e.g.</span>                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">        </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadAttribute</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> -- case </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">4</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">above.</span>                                        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">        </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadAttribute</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Clusters.BasicInformation </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">-- case </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">5</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> above.</span>                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">        </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadAttribute</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span>               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Clusters.BasicInformation.Attributes.Location </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> -- </span>    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">case </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> above.</span>                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">returnClusterObject: This returns the data as</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">consolidated cluster objects, with all </span>       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">attributes for a cluster inside</span>               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">                     a single cluster-wide </span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">cluster object.</span>                               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">reportInterval: A tuple of two int-s for </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">MinIntervalFloor, MaxIntervalCeiling</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">. Used </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">by establishing subscriptions.</span>                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    When not provided, a read request will be</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">sent.</span>                                         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                 <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ReadEvent</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ReadEvent</span><span style=\"font-weight: bold\">(</span>nodeid: int, events:            <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             List<span style=\"font-weight: bold\">[</span>Union<span style=\"font-weight: bold\">[</span>NoneType, Tuple<span style=\"font-weight: bold\">[</span>int<span style=\"font-weight: bold\">]</span>,              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Clus… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Clus… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>int,                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.Cluster<span style=\"font-weight: bold\">]]</span>,  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Tuple<span style=\"font-weight: bold\">[</span>int,                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             Type<span style=\"font-weight: bold\">[</span>chip.clusters.ClusterObjects.ClusterEve… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             reportInterval: Tuple<span style=\"font-weight: bold\">[</span>int, int<span style=\"font-weight: bold\">]</span> = <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">)</span>:      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Read a list of events from a target node</span>      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">nodeId: Target's Node ID</span>                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">events: A list of tuples of varying types </span>    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">depending on the type of read being </span>          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">requested:</span>                                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">endpoint, Clusters.ClusterA.EventA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:    </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = specific</span>                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">endpoint, Clusters.ClusterA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:           </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = *</span>                                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Clusters.ClusterA.EventA</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:              </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = specific</span>                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    endpoint:                                </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = specific,    Cluster = *,         </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = *</span>                                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    Clusters.ClusterA:                       </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = specific,  </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = *</span>                                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">'*'</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> or </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">()</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:                               </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Endpoint = *,           Cluster = *,         </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Event = *</span>                                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">The cluster and events specified above are to</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">be selected from the generated cluster </span>       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">objects.</span>                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">e.g.</span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadEvent</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> -- case </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">4</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> above.</span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadEvent</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> Clusters.BasicInformation </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> -- case</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">5</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> above.</span>                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">ReadEvent</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">[</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span>                       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Clusters.BasicInformation.Events.Location </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">]</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> -- case </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">above.</span>                                        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">reportInterval: A tuple of two int-s for </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">MinIntervalFloor, MaxIntervalCeiling</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">. Used </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">by establishing subscriptions.</span>                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    When not provided, a read request will be</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">sent.</span>                                         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ResolveNode</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ResolveNode</span><span style=\"font-weight: bold\">(</span>nodeid<span style=\"font-weight: bold\">)</span>:                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">SendCommand</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">SendCommand</span><span style=\"font-weight: bold\">(</span>nodeid: int, endpoint: int,   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             payload:                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             chip.clusters.ClusterObjects.ClusterCommand,  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #808000; text-decoration-color: #808000\">responseType</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>, timedRequestTimeoutMs: int <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             = <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">)</span>:                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Send a cluster-object encapsulated command to</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">a node and get returned a future that can be </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">awaited upon to receive the response.</span>         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">If a valid responseType is passed in, that </span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">will be used to deserialize the object. If </span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">not, the type will be automatically deduced</span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">from the metadata received over the wire.</span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">timedWriteTimeoutMs: Timeout for a timed </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">invoke request. Omit or set to </span><span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">'None'</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> to </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">indicate a non-timed request.</span>                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                             <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">SetBlockingCB</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">SetBlockingCB</span><span style=\"font-weight: bold\">(</span>blockingCB<span style=\"font-weight: bold\">)</span>:                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                              <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">SetLogFilter</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">SetLogFilter</span><span style=\"font-weight: bold\">(</span>category<span style=\"font-weight: bold\">)</span>:                   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">SetThreadOperationalDataset</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span>                                          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">SetThreadOperationalDataset</span><span style=\"font-weight: bold\">(</span>threadOperationa… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                        <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">SetWiFiCredentials</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">SetWiFiCredentials</span><span style=\"font-weight: bold\">(</span>ssid, credentials<span style=\"font-weight: bold\">)</span>:    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                  <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">Shutdown</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">Shutdown</span><span style=\"font-weight: bold\">()</span>:                               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Shuts down this controller and reclaims any </span>  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">used resources, including the bound</span>           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">C++ constructor instance in the SDK.</span>          <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                               <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ShutdownAll</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ShutdownAll</span><span style=\"font-weight: bold\">(</span><span style=\"color: #808000; text-decoration-color: #808000\">...</span><span style=\"font-weight: bold\">)</span> <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Shut down all active </span>    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">controllers and reclaim any used resources.</span>   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                            <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">WriteAttribute</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">WriteAttribute</span><span style=\"font-weight: bold\">(</span>nodeid: int, attributes:   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             List<span style=\"font-weight: bold\">[</span>Tuple<span style=\"font-weight: bold\">[</span>int,                               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             chip.clusters.ClusterObjects.ClusterAttribut… <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             timedRequestTimeoutMs: int = <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">)</span>:           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">Write a list of attributes on a target node.</span>  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">nodeId: Target's Node ID</span>                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">timedWriteTimeoutMs: Timeout for a timed </span>     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">write request. Omit or set to </span><span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">'None'</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> to </span>      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">indicate a non-timed request.</span>                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">attributes: A list of tuples of type </span>         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">endpoint, cluster-object</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">)</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">:</span>                   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">E.g</span>                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">    </span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">(</span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">, </span>                                      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #bf7fbf; text-decoration-color: #bf7fbf; font-weight: bold\">Clusters.UnitTesting.Attributes.XYZAttribute</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f; font-weight: bold\">…</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">-- Write </span><span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">'hello'</span><span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\"> to the XYZ attribute on the </span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #7f7f7f; text-decoration-color: #7f7f7f\">test cluster to endpoint </span><span style=\"color: #7fbfbf; text-decoration-color: #7fbfbf; font-weight: bold\">1</span>                    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                          <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLAttributeList</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLAttributeList</span><span style=\"font-weight: bold\">()</span>:                       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                            <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLCommandList</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLCommandList</span><span style=\"font-weight: bold\">()</span>:                         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                          <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLReadAttribute</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLReadAttribute</span><span style=\"font-weight: bold\">(</span>cluster, attribute,      <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             nodeid, endpoint, groupid, <span style=\"color: #808000; text-decoration-color: #808000\">blocking</span>=<span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">)</span>:    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                   <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLSend</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLSend</span><span style=\"font-weight: bold\">(</span>cluster, command, nodeid,         <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             endpoint, groupid, args, <span style=\"color: #808000; text-decoration-color: #808000\">blocking</span>=<span style=\"color: #ff0000; text-decoration-color: #ff0000; font-style: italic\">False</span><span style=\"font-weight: bold\">)</span>:     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                     <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLSubscribeAttribute</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLSubscribeAttribute</span><span style=\"font-weight: bold\">(</span>cluster, attribute, <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             nodeid, endpoint, minInterval, maxInterval,   <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             <span style=\"color: #808000; text-decoration-color: #808000\">blocking</span>=<span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">)</span>:                               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                         <span style=\"color: #808000; text-decoration-color: #808000; font-style: italic\">ZCLWriteAttribute</span> = <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ZCLWriteAttribute</span><span style=\"font-weight: bold\">(</span>cluster: str,           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             attribute: str, nodeid, endpoint, groupid,    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                             value, <span style=\"color: #808000; text-decoration-color: #808000\">blocking</span>=<span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">)</span>:                        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">╰───────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[34m╭─\u001b[0m\u001b[34m────────────────── \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mclass\u001b[0m\u001b[39m \u001b[0m\u001b[32m'chip.ChipDeviceCtrl.ChipDeviceController'\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m ───────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[32m╭───────────────────────────────────────────────────────────────────────────────────────╮\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[32m│\u001b[0m \u001b[1m<\u001b[0m\u001b[1;95mchip.ChipDeviceCtrl.ChipDeviceController\u001b[0m\u001b[39m object at \u001b[0m\u001b[1;36m0x1143b3910\u001b[0m\u001b[1m>\u001b[0m                      \u001b[32m│\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[32m╰───────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                \u001b[3;33mactiveList\u001b[0m = \u001b[1m{\u001b[0m                                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                 \u001b[1m<\u001b[0m\u001b[1;95mchip.ChipDeviceCtrl.ChipDeviceController\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[39mobject at \u001b[0m\u001b[1;36m0x1143b3910\u001b[0m\u001b[1m>\u001b[0m                        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1m}\u001b[0m                                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                   \u001b[3;33mdevCtrl\u001b[0m = \u001b[1;35mc_void_p\u001b[0m\u001b[1m(\u001b[0m\u001b[1;36m140320379576320\u001b[0m\u001b[1m)\u001b[0m                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                  \u001b[3;33misActive\u001b[0m = \u001b[3;92mTrue\u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                     \u001b[3;33mstate\u001b[0m = \u001b[1m<\u001b[0m\u001b[1;95mDCState.IDLE:\u001b[0m\u001b[39m \u001b[0m\u001b[1;36m1\u001b[0m\u001b[1m>\u001b[0m                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m        \u001b[3;33mcbHandleCommissioningCompleteFunct\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mcbHandleCommissioningCompleteFunct\u001b[0m\u001b[1m(\u001b[0m\u001b[33m...\u001b[0m\u001b[1m)\u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m          \u001b[3;33mcbHandleKeyExchangeCompleteFunct\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mcbHandleKeyExchangeCompleteFunct\u001b[0m\u001b[1m(\u001b[0m\u001b[33m...\u001b[0m\u001b[1m)\u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                 \u001b[3;33mcbOnAddressUpdateComplete\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mcbOnAddressUpdateComplete\u001b[0m\u001b[1m(\u001b[0m\u001b[33m...\u001b[0m\u001b[1m)\u001b[0m            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                             \u001b[3;33mCheckIsActive\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mCheckIsActive\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                        \u001b[3;33mCloseBLEConnection\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mCloseBLEConnection\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                              \u001b[3;33mCloseSession\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mCloseSession\u001b[0m\u001b[1m(\u001b[0mnodeid\u001b[1m)\u001b[0m:                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                \u001b[3;33mCommission\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mCommission\u001b[0m\u001b[1m(\u001b[0mnodeid\u001b[1m)\u001b[0m:                       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                              \u001b[3;33mCommissionIP\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mCommissionIP\u001b[0m\u001b[1m(\u001b[0mipaddr, setupPinCode,        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             nodeid\u001b[1m)\u001b[0m:                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                \u001b[3;33mConnectBLE\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mConnectBLE\u001b[0m\u001b[1m(\u001b[0mdiscriminator, setupPinCode,   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             nodeid\u001b[1m)\u001b[0m:                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                \u001b[3;33mConnectBle\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mConnectBle\u001b[0m\u001b[1m(\u001b[0mbleConnection\u001b[1m)\u001b[0m:                \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                  \u001b[3;33mDiscoverAllCommissioning\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mDiscoverAllCommissioning\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;33mDiscoverCommissionableNodesCommissioningEn…\u001b[0m \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                           = \u001b[1;31mDiscoverCommissionableNodesCommissioningEnab…\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m     \u001b[3;33mDiscoverCommissionableNodesDeviceType\u001b[0m = \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;31mDiscoverCommissionableNodesDeviceType\u001b[0m\u001b[1m(\u001b[0mdevice… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;33mDiscoverCommissionableNodesLongDiscriminat…\u001b[0m \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                           = \u001b[1;31mDiscoverCommissionableNodesLongDiscriminator\u001b[0m\u001b[1m…\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;33mDiscoverCommissionableNodesShortDiscrimina…\u001b[0m \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                           = \u001b[1;31mDiscoverCommissionableNodesShortDiscriminato…\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m         \u001b[3;33mDiscoverCommissionableNodesVendor\u001b[0m = \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;31mDiscoverCommissionableNodesVendor\u001b[0m\u001b[1m(\u001b[0mvendor\u001b[1m)\u001b[0m:    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                    \u001b[3;33mEstablishPASESessionIP\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mEstablishPASESessionIP\u001b[0m\u001b[1m(\u001b[0mipaddr,            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             setupPinCode, nodeid\u001b[1m)\u001b[0m:                        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                         \u001b[3;33mGetAddressAndPort\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetAddressAndPort\u001b[0m\u001b[1m(\u001b[0mnodeid\u001b[1m)\u001b[0m:                \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                         \u001b[3;33mGetClusterHandler\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetClusterHandler\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                     \u001b[3;33mGetCompressedFabricId\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetCompressedFabricId\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                    \u001b[3;33mGetConnectedDeviceSync\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetConnectedDeviceSync\u001b[0m\u001b[1m(\u001b[0mnodeid\u001b[1m)\u001b[0m:           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mGetFabricId\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetFabricId\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                  \u001b[3;33mGetIPForDiscoveredDevice\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetIPForDiscoveredDevice\u001b[0m\u001b[1m(\u001b[0midx, addrStr,    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             length\u001b[1m)\u001b[0m:                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                              \u001b[3;33mGetLogFilter\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mGetLogFilter\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mIsConnected\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mIsConnected\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                   \u001b[3;33mOpenCommissioningWindow\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mOpenCommissioningWindow\u001b[0m\u001b[1m(\u001b[0mnodeid, timeout,  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             iteration, discriminator, option\u001b[1m)\u001b[0m:            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mParseQRCode\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mParseQRCode\u001b[0m\u001b[1m(\u001b[0mqrCode, output\u001b[1m)\u001b[0m:              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                    \u001b[3;33mPrintDiscoveredDevices\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mPrintDiscoveredDevices\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                             \u001b[3;33mReadAttribute\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mReadAttribute\u001b[0m\u001b[1m(\u001b[0mnodeid: int, attributes:    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             List\u001b[1m[\u001b[0mUnion\u001b[1m[\u001b[0mNoneType, Tuple\u001b[1m[\u001b[0mint\u001b[1m]\u001b[0m,              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mType\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Clus… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mType\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Clus… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mint,                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Type\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Cluster\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mint,                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Type\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.ClusterAtt… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             returnClusterObject: bool = \u001b[3;91mFalse\u001b[0m,            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             reportInterval: Tuple\u001b[1m[\u001b[0mint, int\u001b[1m]\u001b[0m = \u001b[3;35mNone\u001b[0m,       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             fabricFiltered: bool = \u001b[3;92mTrue\u001b[0m\u001b[1m)\u001b[0m:                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mRead a list of attributes from a target node\u001b[0m  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mnodeId: Target's Node ID\u001b[0m                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mattributes: A list of tuples of varying types\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mdepending on the type of read being \u001b[0m          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mrequested:\u001b[0m                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mendpoint, Clusters.ClusterA.AttributeA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = specific\u001b[0m                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mendpoint, Clusters.ClusterA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:           \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = *\u001b[0m                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mClusters.ClusterA.AttributeA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:          \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = specific\u001b[0m                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    endpoint:                                \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = *,         \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = *\u001b[0m                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    Clusters.ClusterA:                       \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = *\u001b[0m                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[2;32m'*'\u001b[0m\u001b[2m or \u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:                               \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = *,         \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mAttribute = *\u001b[0m                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    The cluster and attributes specified \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mabove are to be selected from the generated \u001b[0m  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mcluster objects.\u001b[0m                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    e.g.\u001b[0m                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m        \u001b[0m\u001b[1;2;35mReadAttribute\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m \u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m -- case \u001b[0m\u001b[1;2;36m4\u001b[0m\u001b[2m \u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mabove.\u001b[0m                                        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m        \u001b[0m\u001b[1;2;35mReadAttribute\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m Clusters.BasicInformation \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m-- case \u001b[0m\u001b[1;2;36m5\u001b[0m\u001b[2m above.\u001b[0m                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m        \u001b[0m\u001b[1;2;35mReadAttribute\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mClusters.BasicInformation.Attributes.Location \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m -- \u001b[0m    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mcase \u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m above.\u001b[0m                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mreturnClusterObject: This returns the data as\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mconsolidated cluster objects, with all \u001b[0m       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mattributes for a cluster inside\u001b[0m               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m                     a single cluster-wide \u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mcluster object.\u001b[0m                               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mreportInterval: A tuple of two int-s for \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;2m(\u001b[0m\u001b[2mMinIntervalFloor, MaxIntervalCeiling\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m. Used \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mby establishing subscriptions.\u001b[0m                \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    When not provided, a read request will be\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2msent.\u001b[0m                                         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                 \u001b[3;33mReadEvent\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mReadEvent\u001b[0m\u001b[1m(\u001b[0mnodeid: int, events:            \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             List\u001b[1m[\u001b[0mUnion\u001b[1m[\u001b[0mNoneType, Tuple\u001b[1m[\u001b[0mint\u001b[1m]\u001b[0m,              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mType\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Clus… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mType\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Clus… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mint,                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Type\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.Cluster\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Tuple\u001b[1m[\u001b[0mint,                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             Type\u001b[1m[\u001b[0mchip.clusters.ClusterObjects.ClusterEve… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             reportInterval: Tuple\u001b[1m[\u001b[0mint, int\u001b[1m]\u001b[0m = \u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m:      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mRead a list of events from a target node\u001b[0m      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mnodeId: Target's Node ID\u001b[0m                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mevents: A list of tuples of varying types \u001b[0m    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mdepending on the type of read being \u001b[0m          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mrequested:\u001b[0m                                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mendpoint, Clusters.ClusterA.EventA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:    \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = specific\u001b[0m                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mendpoint, Clusters.ClusterA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:           \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = *\u001b[0m                                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[2mClusters.ClusterA.EventA\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:              \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = specific\u001b[0m                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    endpoint:                                \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = specific,    Cluster = *,         \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = *\u001b[0m                                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    Clusters.ClusterA:                       \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = specific,  \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = *\u001b[0m                                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[2;32m'*'\u001b[0m\u001b[2m or \u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:                               \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEndpoint = *,           Cluster = *,         \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mEvent = *\u001b[0m                                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mThe cluster and events specified above are to\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mbe selected from the generated cluster \u001b[0m       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mobjects.\u001b[0m                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2me.g.\u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2;35mReadEvent\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m \u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m -- case \u001b[0m\u001b[1;2;36m4\u001b[0m\u001b[2m above.\u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2;35mReadEvent\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m Clusters.BasicInformation \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m -- case\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;2;36m5\u001b[0m\u001b[2m above.\u001b[0m                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2;35mReadEvent\u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m\u001b[1;2m[\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m                       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mClusters.BasicInformation.Events.Location \u001b[0m\u001b[1;2m]\u001b[0m\u001b[2m \u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m -- case \u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mabove.\u001b[0m                                        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mreportInterval: A tuple of two int-s for \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;2m(\u001b[0m\u001b[2mMinIntervalFloor, MaxIntervalCeiling\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m. Used \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mby establishing subscriptions.\u001b[0m                \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    When not provided, a read request will be\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2msent.\u001b[0m                                         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mResolveNode\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mResolveNode\u001b[0m\u001b[1m(\u001b[0mnodeid\u001b[1m)\u001b[0m:                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mSendCommand\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mSendCommand\u001b[0m\u001b[1m(\u001b[0mnodeid: int, endpoint: int,   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             payload:                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             chip.clusters.ClusterObjects.ClusterCommand,  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[33mresponseType\u001b[0m=\u001b[3;35mNone\u001b[0m, timedRequestTimeoutMs: int \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             = \u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m:                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mSend a cluster-object encapsulated command to\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2ma node and get returned a future that can be \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mawaited upon to receive the response.\u001b[0m         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mIf a valid responseType is passed in, that \u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mwill be used to deserialize the object. If \u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mnot, the type will be automatically deduced\u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mfrom the metadata received over the wire.\u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mtimedWriteTimeoutMs: Timeout for a timed \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2minvoke request. Omit or set to \u001b[0m\u001b[2;32m'None'\u001b[0m\u001b[2m to \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mindicate a non-timed request.\u001b[0m                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                             \u001b[3;33mSetBlockingCB\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mSetBlockingCB\u001b[0m\u001b[1m(\u001b[0mblockingCB\u001b[1m)\u001b[0m:                \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                              \u001b[3;33mSetLogFilter\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mSetLogFilter\u001b[0m\u001b[1m(\u001b[0mcategory\u001b[1m)\u001b[0m:                   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m               \u001b[3;33mSetThreadOperationalDataset\u001b[0m = \u001b[3;96mdef \u001b[0m                                          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;31mSetThreadOperationalDataset\u001b[0m\u001b[1m(\u001b[0mthreadOperationa… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                        \u001b[3;33mSetWiFiCredentials\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mSetWiFiCredentials\u001b[0m\u001b[1m(\u001b[0mssid, credentials\u001b[1m)\u001b[0m:    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                  \u001b[3;33mShutdown\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mShutdown\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mShuts down this controller and reclaims any \u001b[0m  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mused resources, including the bound\u001b[0m           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mC++ constructor instance in the SDK.\u001b[0m          \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                               \u001b[3;33mShutdownAll\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mShutdownAll\u001b[0m\u001b[1m(\u001b[0m\u001b[33m...\u001b[0m\u001b[1m)\u001b[0m \u001b[2mShut down all active \u001b[0m    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mcontrollers and reclaim any used resources.\u001b[0m   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                            \u001b[3;33mWriteAttribute\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mWriteAttribute\u001b[0m\u001b[1m(\u001b[0mnodeid: int, attributes:   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             List\u001b[1m[\u001b[0mTuple\u001b[1m[\u001b[0mint,                               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             chip.clusters.ClusterObjects.ClusterAttribut… \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             timedRequestTimeoutMs: int = \u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m:           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mWrite a list of attributes on a target node.\u001b[0m  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mnodeId: Target's Node ID\u001b[0m                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mtimedWriteTimeoutMs: Timeout for a timed \u001b[0m     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mwrite request. Omit or set to \u001b[0m\u001b[2;32m'None'\u001b[0m\u001b[2m to \u001b[0m      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mindicate a non-timed request.\u001b[0m                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mattributes: A list of tuples of type \u001b[0m         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;2m(\u001b[0m\u001b[2mendpoint, cluster-object\u001b[0m\u001b[1;2m)\u001b[0m\u001b[2m:\u001b[0m                   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mE.g\u001b[0m                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m    \u001b[0m\u001b[1;2m(\u001b[0m\u001b[1;2;36m1\u001b[0m\u001b[2m, \u001b[0m                                      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[1;2;35mClusters.UnitTesting.luster.Attributes.XYZAttribute\u001b[0m\u001b[1;2m…\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2m-- Write \u001b[0m\u001b[2;32m'hello'\u001b[0m\u001b[2m to the XYZ attribute on the \u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[2mtest cluster to endpoint \u001b[0m\u001b[1;2;36m1\u001b[0m                    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                          \u001b[3;33mZCLAttributeList\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLAttributeList\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                            \u001b[3;33mZCLCommandList\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLCommandList\u001b[0m\u001b[1m(\u001b[0m\u001b[1m)\u001b[0m:                         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                          \u001b[3;33mZCLReadAttribute\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLReadAttribute\u001b[0m\u001b[1m(\u001b[0mcluster, attribute,      \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             nodeid, endpoint, groupid, \u001b[33mblocking\u001b[0m=\u001b[3;92mTrue\u001b[0m\u001b[1m)\u001b[0m:    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                   \u001b[3;33mZCLSend\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLSend\u001b[0m\u001b[1m(\u001b[0mcluster, command, nodeid,         \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             endpoint, groupid, args, \u001b[33mblocking\u001b[0m=\u001b[3;91mFalse\u001b[0m\u001b[1m)\u001b[0m:     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                     \u001b[3;33mZCLSubscribeAttribute\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLSubscribeAttribute\u001b[0m\u001b[1m(\u001b[0mcluster, attribute, \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             nodeid, endpoint, minInterval, maxInterval,   \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             \u001b[33mblocking\u001b[0m=\u001b[3;92mTrue\u001b[0m\u001b[1m)\u001b[0m:                               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                         \u001b[3;33mZCLWriteAttribute\u001b[0m = \u001b[3;96mdef \u001b[0m\u001b[1;31mZCLWriteAttribute\u001b[0m\u001b[1m(\u001b[0mcluster: str,           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             attribute: str, nodeid, endpoint, groupid,    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                             value, \u001b[33mblocking\u001b[0m=\u001b[3;92mTrue\u001b[0m\u001b[1m)\u001b[0m:                        \u001b[34m│\u001b[0m\n",
       "\u001b[34m╰───────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭─────────── </span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">function</span><span style=\"color: #000000; text-decoration-color: #000000\"> mattersetlog at </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0x115ea1670</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&gt;</span><span style=\"color: #000080; text-decoration-color: #000080\"> ───────────╮</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">mattersetlog</span><span style=\"font-weight: bold\">(</span>level<span style=\"font-weight: bold\">)</span>:                                     <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">35</span><span style=\"font-style: italic\"> attribute(s) not shown.</span> Run <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">inspect</span><span style=\"font-weight: bold\">(</span>inspect<span style=\"font-weight: bold\">)</span> for options. <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">╰──────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[34m╭─\u001b[0m\u001b[34m────────── \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mfunction\u001b[0m\u001b[39m mattersetlog at \u001b[0m\u001b[1;36m0x115ea1670\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m ──────────\u001b[0m\u001b[34m─╮\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;96mdef \u001b[0m\u001b[1;31mmattersetlog\u001b[0m\u001b[1m(\u001b[0mlevel\u001b[1m)\u001b[0m:                                     \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[1;36m35\u001b[0m\u001b[3m attribute(s) not shown.\u001b[0m Run \u001b[1;35minspect\u001b[0m\u001b[1m(\u001b[0minspect\u001b[1m)\u001b[0m for options. \u001b[34m│\u001b[0m\n",
       "\u001b[34m╰──────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭───────────────── </span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">function</span><span style=\"color: #000000; text-decoration-color: #000000\"> mattersetdebug at </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0x115ea1700</span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&gt;</span><span style=\"color: #000080; text-decoration-color: #000080\"> ──────────────────╮</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">mattersetdebug</span><span style=\"font-weight: bold\">(</span>enableDebugMode: bool = <span style=\"color: #00ff00; text-decoration-color: #00ff00; font-style: italic\">True</span><span style=\"font-weight: bold\">)</span>:                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">Enables debug mode that is utilized by some Matter modules</span>                  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">to better facilitate debugging of failures </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">(</span><span style=\"color: #008080; text-decoration-color: #008080\">e.g throwing exceptions instead</span> <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">of returning well-formatted results</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">)</span><span style=\"color: #008080; text-decoration-color: #008080\">.</span>                                       <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">35</span><span style=\"font-style: italic\"> attribute(s) not shown.</span> Run <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">inspect</span><span style=\"font-weight: bold\">(</span>inspect<span style=\"font-weight: bold\">)</span> for options.                <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">╰─────────────────────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[34m╭─\u001b[0m\u001b[34m──────────────── \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mfunction\u001b[0m\u001b[39m mattersetdebug at \u001b[0m\u001b[1;36m0x115ea1700\u001b[0m\u001b[1;34m>\u001b[0m\u001b[34m ─────────────────\u001b[0m\u001b[34m─╮\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;96mdef \u001b[0m\u001b[1;31mmattersetdebug\u001b[0m\u001b[1m(\u001b[0menableDebugMode: bool = \u001b[3;92mTrue\u001b[0m\u001b[1m)\u001b[0m:                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mEnables debug mode that is utilized by some Matter modules\u001b[0m                  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mto better facilitate debugging of failures \u001b[0m\u001b[1;36m(\u001b[0m\u001b[36me.g throwing exceptions instead\u001b[0m \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mof returning well-formatted results\u001b[0m\u001b[1;36m)\u001b[0m\u001b[36m.\u001b[0m                                       \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[1;36m35\u001b[0m\u001b[3m attribute(s) not shown.\u001b[0m Run \u001b[1;35minspect\u001b[0m\u001b[1m(\u001b[0minspect\u001b[1m)\u001b[0m for options.                \u001b[34m│\u001b[0m\n",
       "\u001b[34m╰─────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "matterhelp()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17536445-9ca7-4bcb-9a1b-752d08858442",
   "metadata": {},
   "source": [
    "To get help on a specific method in that class, you can pass that in as an argument:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "537404ad-cf20-4ce8-9cd6-037c397339ee",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"color: #000080; text-decoration-color: #000080\">╭─ </span><span style=\"color: #000080; text-decoration-color: #000080; font-weight: bold\">&lt;</span><span style=\"color: #ff00ff; text-decoration-color: #ff00ff; font-weight: bold\">bound</span><span style=\"color: #000000; text-decoration-color: #000000\"> method ChipDeviceController.SendCommand of &lt;chip.ChipDeviceCtrl.ChipDeviceControl</span><span style=\"color: #000080; text-decoration-color: #000080\">─╮</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #00ffff; text-decoration-color: #00ffff; font-style: italic\">def </span><span style=\"color: #800000; text-decoration-color: #800000; font-weight: bold\">ChipDeviceController.SendCommand</span><span style=\"font-weight: bold\">(</span>nodeid: int, endpoint: int, payload:                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> chip.clusters.ClusterObjects.ClusterCommand, <span style=\"color: #808000; text-decoration-color: #808000\">responseType</span>=<span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span>, timedRequestTimeoutMs:    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> int = <span style=\"color: #800080; text-decoration-color: #800080; font-style: italic\">None</span><span style=\"font-weight: bold\">)</span>:                                                                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">Send a cluster-object encapsulated command to a node and get returned a future that can </span>  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">be awaited upon to receive the response.</span>                                                  <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">If a valid responseType is passed in, that will be used to deserialize the object. If </span>    <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">not, the type will be automatically deduced</span>                                               <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">from the metadata received over the wire.</span>                                                 <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">timedWriteTimeoutMs: Timeout for a timed invoke request. Omit or set to </span><span style=\"color: #008000; text-decoration-color: #008000\">'None'</span><span style=\"color: #008080; text-decoration-color: #008080\"> to </span>        <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080\">indicate a non-timed request.</span>                                                             <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span>                                                                                           <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">│</span> <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">27</span><span style=\"font-style: italic\"> attribute(s) not shown.</span> Run <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">inspect</span><span style=\"font-weight: bold\">(</span>inspect<span style=\"font-weight: bold\">)</span> for options.                              <span style=\"color: #000080; text-decoration-color: #000080\">│</span>\n",
       "<span style=\"color: #000080; text-decoration-color: #000080\">╰───────────────────────────────────────────────────────────────────────────────────────────╯</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[34m╭─\u001b[0m\u001b[34m \u001b[0m\u001b[1;34m<\u001b[0m\u001b[1;95mbound\u001b[0m\u001b[39m method ChipDeviceController.SendCommand of <chip.ChipDeviceCtrl.ChipDeviceControl\u001b[0m\u001b[34m─╮\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[3;96mdef \u001b[0m\u001b[1;31mChipDeviceController.SendCommand\u001b[0m\u001b[1m(\u001b[0mnodeid: int, endpoint: int, payload:                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m chip.clusters.ClusterObjects.ClusterCommand, \u001b[33mresponseType\u001b[0m=\u001b[3;35mNone\u001b[0m, timedRequestTimeoutMs:    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m int = \u001b[3;35mNone\u001b[0m\u001b[1m)\u001b[0m:                                                                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mSend a cluster-object encapsulated command to a node and get returned a future that can \u001b[0m  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mbe awaited upon to receive the response.\u001b[0m                                                  \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mIf a valid responseType is passed in, that will be used to deserialize the object. If \u001b[0m    \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mnot, the type will be automatically deduced\u001b[0m                                               \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mfrom the metadata received over the wire.\u001b[0m                                                 \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mtimedWriteTimeoutMs: Timeout for a timed invoke request. Omit or set to \u001b[0m\u001b[32m'None'\u001b[0m\u001b[36m to \u001b[0m        \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[36mindicate a non-timed request.\u001b[0m                                                             \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m                                                                                           \u001b[34m│\u001b[0m\n",
       "\u001b[34m│\u001b[0m \u001b[1;36m27\u001b[0m\u001b[3m attribute(s) not shown.\u001b[0m Run \u001b[1;35minspect\u001b[0m\u001b[1m(\u001b[0minspect\u001b[1m)\u001b[0m for options.                              \u001b[34m│\u001b[0m\n",
       "\u001b[34m╰───────────────────────────────────────────────────────────────────────────────────────────╯\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "matterhelp(devCtrl.SendCommand)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85a5e222-3efc-499a-b41b-a76ec75e17ea",
   "metadata": {},
   "source": [
    "## Log Levels\n",
    "\n",
    "By default on boot, the log level is set to `logging.ERROR`. If you would like to see more debug messages, you can set the logging level by doing so:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "331b1d7b-02c7-4415-9583-630973024de7",
   "metadata": {},
   "outputs": [],
   "source": [
    "mattersetlog(logging.DEBUG)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f27e75e7-71fe-44fa-b070-f804a6afd1ce",
   "metadata": {},
   "source": [
    "To set it back:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f0e3428d-2316-4f45-9746-f637191634c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "mattersetlog(logging.WARNING)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8bb4bc6-336e-4747-8a8b-dc8369f92246",
   "metadata": {},
   "source": [
    "## Pretty Printing\n",
    "The Matter REPL leverages the rich Python package heavily to do pretty printing of various data structures with appropriate colored formatting.\n",
    "\n",
    "This pretty printer is installed by default into the REPL environment:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8282f584-bd20-4b2b-b8f9-ea72cf6c4820",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">\n",
       "<span style=\"font-weight: bold\">{</span>\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   </span><span style=\"color: #008000; text-decoration-color: #008000\">'value'</span>: <span style=\"font-weight: bold\">[</span>\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span>,\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span>,\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">3</span>,\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">4</span>,\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"font-weight: bold\">[</span>\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">1</span>,\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   │   </span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2</span>\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   │   </span><span style=\"font-weight: bold\">]</span>\n",
       "<span style=\"color: #7fbf7f; text-decoration-color: #7fbf7f\">│   </span><span style=\"font-weight: bold\">]</span>\n",
       "<span style=\"font-weight: bold\">}</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\n",
       "\u001b[1m{\u001b[0m\n",
       "\u001b[2;32m│   \u001b[0m\u001b[32m'value'\u001b[0m: \u001b[1m[\u001b[0m\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1;36m1\u001b[0m,\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1;36m2\u001b[0m,\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1;36m3\u001b[0m,\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1;36m4\u001b[0m,\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1m[\u001b[0m\n",
       "\u001b[2;32m│   │   │   \u001b[0m\u001b[1;36m1\u001b[0m,\n",
       "\u001b[2;32m│   │   │   \u001b[0m\u001b[1;36m2\u001b[0m\n",
       "\u001b[2;32m│   │   \u001b[0m\u001b[1m]\u001b[0m\n",
       "\u001b[2;32m│   \u001b[0m\u001b[1m]\u001b[0m\n",
       "\u001b[1m}\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = {'value': [1, 2, 3, 4, [1, 2]]}\n",
    "a"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "matter-env",
   "language": "python",
   "name": "matter-env"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2+chromium.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
